﻿///***************************************************************
/// 시  스  템 : UPDMS.Updm
/// 단위시스템 : Home
/// 계      층 : Presentation Layer
/// 프로그램명 : Index
/// 파  일  명 : Index.aspx.cs
/// 설      명 : 사용자 로그인
///***************************************************************
/// 수정ID 일자       이름     내용
///---------------------------------------------------------------
/// CH001  2011-03-08 송시명   최초 작성
///***************************************************************
using System;
using System.Data;
using System.Web.Security;
using System.Web.UI;

using SMFramework.Configuration; 
using SMFramework.Data;
using SMFramework.Utility;

using Base.Dac;
using System.Net;
using System.Web;


namespace Updms
{
	public partial class Index : System.Web.UI.Page
	{
		#region 전역영역

		public static readonly string PID = "Index";
		
		#endregion

		#region Page_Load

		protected void Page_Load(object sender, EventArgs e)
		{
			//세션오류로 넘어온 경우 경고창 보여줌
			if (Request.QueryString["err"] != null && Request.QueryString["err"] == "SESSION")
			{
				//세션이 종료되었습니다. 다시 로그인 하세요
				Response.Redirect("./Common/Inc/MsgBoxController.aspx?msg_id=MSG_ERR_073&tp=AX");
			}
			
			ltr_ver.Text = WebConfig.Updms["App.Version"];

			//무조건 세션 모두삭제
			Session.Clear();
			
			SetClientScript();
		}
		
		#endregion

		#region SetClientScript

		private void SetClientScript()
		{
			//onKeyPress이벤트
			txt_pw.Attributes.Add("onkeypress", "chkCapsLock(event)");
		}

		#endregion

		#region IsLoginOk, SetStartPage

		//Id와 Pw로 로그인 가능여부를 return한다.
		private void DoLogin(string ls_id, string ls_pw)
		{
			bool lb_rslt = false;
			DataSet lo_ds = new DataSet();
			DataPack dp = new DataPack();

			dp.AddProperty("ls_user_id", typeof(string), ls_id);
			dp.AddProperty("ls_pw", typeof(string), FormsAuthentication.HashPasswordForStoringInConfigFile(ls_pw, "SHA1"));

			try
			{
				using (AccessCheck ac = new AccessCheck())
				{
					lo_ds.Merge(ac.CheckLoginInfo(dp));

					// 리턴값이 있으면 true
					if (DataSetUtil.CheckRowCount(lo_ds, "UPDMS_COM_USER_MGT"))
					{
						lb_rslt = true;

						// 가져온 정보를 세션에 담는다.
						Session["User_Id"]		= DataSetUtil.GetFldStr(lo_ds, "UPDMS_COM_USER_MGT", "User_Id");
						Session["User_Nm"]		= DataSetUtil.GetFldStr(lo_ds, "UPDMS_COM_USER_MGT", "Nm");
						Session["Access_Level"]	= DataSetUtil.GetFldStr(lo_ds, "UPDMS_COM_USER_MGT", "User_Level");
						Session["User_Div"]		= DataSetUtil.GetFldStr(lo_ds, "UPDMS_COM_USER_MGT", "User_Div");
						Session["Group_Nm"]		= DataSetUtil.GetFldStr(lo_ds, "UPDMS_COM_USER_MGT", "Group_Nm");
						Session["Lang_Set"]		= DataSetUtil.GetFldStr(lo_ds, "UPDMS_COM_USER_MGT", "Language_Set");

						//서버변수를 세션에 담는다.
						Session["User_IP"] = GetIP4Address();//Page.Request.UserHostAddress;
						Session["Server_IP"] = GetIP4Address(); //Page.Request.ServerVariables["LOCAL_ADDR"].ToString();
						Session["Browser_Nm"] = Page.Request.Browser.Browser;
						Session["Browser_Ver"] = Page.Request.Browser.Version;
					}
				}

				if (lb_rslt)
				{
					//설정값을 세션에 담는다
					using (Global global = new Global())
					{
						DataSet lo_ds_setting = new DataSet();
						lo_ds_setting = global.GetSettingValueByUserId(Session["User_Id"].ToString());

						if (DataSetUtil.CheckRowCount(lo_ds_setting, "UPDMS_CFG_SETTING_MGT"))
						{
							for (int i = 0; i < DataSetUtil.GetRowCount(lo_ds_setting, "UPDMS_CFG_SETTING_MGT"); i++)
							{
								string ls_setting_cd = DataSetUtil.GetFldStr(lo_ds_setting, "UPDMS_CFG_SETTING_MGT", i, "Setting_Cd");
								string ls_setting_value = DataSetUtil.GetFldStr(lo_ds_setting, "UPDMS_CFG_SETTING_MGT", i, "Setting_Value");

								Session[ls_setting_cd] = ls_setting_value;
							}
						}
					}

					GoStartPage(dp);
				}
				else
				{
					//로그인 실패.아이디와 패스워드를 확인하세요
					Response.Redirect("./Common/Inc/MsgBoxController.aspx?msg_id=MSG_ERR_000&tp=AB");
				}
			}
			catch (System.Threading.ThreadAbortException)
			{
				throw;
			}
			catch (Exception ex)
			{
				//Base.AppFramework.SMEventLog.WriteExceptionLog(ex);
				
				string ls_ex_message = ex.Message.Replace("\r\n", "\\n").Replace("'", "").Replace("\"", "");
				ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), null, "callExceptionMsgBox('" + ls_ex_message + "', 'A');", true);
			}
		}

		//로그인후 지정된 페이지로 이동
		private void GoStartPage(DataPack dp)
		{
			using (AccessCheck ac = new AccessCheck())
			{
				//비밀번호 만료기능 체크
				if (ac.IsPwExpiredUsingYn(dp))
				{
					Response.Redirect("./Com/Com3011p.aspx?page_mode=IP");
				}

				string ls_go_url = ac.GetStartPage(Session["User_Id"].ToString());
				Response.Redirect(ls_go_url);
			}
		}

		#endregion

		#region 버튼이벤트
		
		//로그인
		protected void ibtn_login_Click(object sender, EventArgs e)
		{
			DoLogin(txt_id.Text, txt_pw.Text);
		}
		
		#endregion

		#region SetTimeStamp

		//SetLastVer
		public String SetTimeStamp()
		{
			return WebConfig.Updms["App.TimeStamp"];
		}

		#endregion

		#region GetIP4Address

		//사용자의 IP를 구한다.
		public static string GetIP4Address()
		{
			string IP4Address = String.Empty;

			foreach (IPAddress IPA in Dns.GetHostAddresses(HttpContext.Current.Request.UserHostAddress))
			{
				if (IPA.AddressFamily.ToString() == "InterNetwork")
				{
					IP4Address = IPA.ToString();
					break;
				}
			}

			if (IP4Address != String.Empty)
			{
				return IP4Address;
			}

			foreach (IPAddress IPA in Dns.GetHostAddresses(Dns.GetHostName()))
			{
				if (IPA.AddressFamily.ToString() == "InterNetwork")
				{
					IP4Address = IPA.ToString();
					break;
				}
			}

			return IP4Address;
		}

		#endregion
	}
}
